﻿using System;
using System.Configuration.Provider;
using NCMIS.AccessControl;
using NCMIS.ObjectModel;
using NCMIS.Produce;

namespace NCMIS.Provider
{
    /// <summary>
    /// Provides the base implementation for the Versioning Provider for the Versioning Services.
    /// </summary>
    public abstract class VersioningProviderBase : ProviderBase
    {
        public abstract CopyFlaggedDocumentId CheckOut(string repositoryId, string documentId);

        public abstract void CancelCheckOut(string repositoryId, string documentId);

        public abstract string CheckIn(string repositoryId, string documentId, Nullable<bool> major, CmisProperties properties, ContentStream contentStream, string checkinComment, string[] policies, AccessControlList addACEs, AccessControlList removeACEs);

        public abstract CmisObject GetObjectOfLatestVersion(string repositoryId, string objectId, bool major, string filter, bool includeAllowableActions, IncludeRelationships includeRelationships, string renditionFilter, bool includePolicyIds, bool includeAcl);

        public abstract CmisProperties GetPropertiesOfLatestVersion(string repositoryId, string objectId, bool major, string filter);

        public abstract CmisObject[] GetAllVersions(string repositoryId, string objectId, string filter, bool includeAllowableActions);
    }
}
